

class RequestQueue {
    // 1.定义
    constructor() {
        this.list = [];
        this.limit = 3;
        this.index = 0;
    }
    // 2.添加任务方法：将请求任务加入队列
    addTask(task) {
        // 将新任务添加到队列末尾
        this.list.push(task);
        // 尝试执行队列中的任务
        this.applyTask();
    }
    // 3.执行任务方法，控制并发执行逻辑
    applyTask() {
        // 条件1 请求数
        if (this.index >= this.limit) {
            return; // 退出方法，不再执行后续逻辑
        }

        // 条件2 队列没任务，停止执行
        if (this.list.length === 0) {
            return; // 退出方法
        }

         this.index++; // 计数器+1：正在执行的请求数增加
         const topTask = this.list.shift(); // 数组方法shift：取出队列第一个任务（先进先出）

         topTask().then(() => {
            this.index--; // 请求成功后，计数器-1：正在执行的请求数减少
            this.applyTask(); // 递归调用：继续执行下一个任务
         })
    }
}

// 导出队列实例：创建一个全局唯一的队列对象，供其他文件使用
export const requestQueue = new RequestQueue();